Monte Carlo path tracing is an iterative technique for rendering images of three-dimensional scenes using physical models of global illumination (e.g., to simulate light transport as it occurs in real life). The technique may be used to provide computer-generated photorealistic renderings of three-dimensional objects.
Monte Carlo path tracing may be used to render polygonal mesh models. Since no participating medium is traversed when rays are cast among polygons, volumetric data (e.g., three-dimensional arrays of voxels) may not be sampled in renderings of polygonal mesh models.
However, Monte Carlo path tracing methods may also be used to render volumetric data, a technique commonly known as Monte Carlo volume rendering. The volumetric data may be used, for example, to generate realistic cinematic special effects (e.g., heterogeneous participating media, such as fog, smoke, fire, and clouds; atmospheric effects, such as light beams passing through fog; etc.). Using Monte Carlo path tracing to render volumetric data is extremely computationally intensive because ray directions are randomized and samples are interpolated along each of the rays. The random access of voxel data from all of the randomly generated rays and all of the interpolations may be inefficient. Thus, since Monte Carlo path tracing methods are iterative and very time consuming, approximations may be made that provide comparable rendering results without requiring accurate computation of global illumination.
In some cases, volumetric data to be rendered may include three-dimensional volumes of medical data sets. If the volume to be rendered includes such medical data, gross approximations of global illumination to speed up rendering may be inadvisable since the rendered images of the medical data may be used for diagnostic purposes.
Despite the use of graphics processing units (GPUs) with thousands of processor cores to speed up computations, rendering volumetric data with Monte Carlo path tracing is still time consuming since thousands of samples are trilinearly interpolated along the paths of millions of scattered rays throughout the volume. Within each iteration, scattered rays may diverge significantly from one another. As a result, the interpolated volume samples along the rays may be far apart in the memory that stores the volumetric data. This in turn leads to poor performance since it causes non-optimal memory access patterns that do not preserve cache coherency while voxel samples are being interpolated along multiple rays being computed in parallel by multiple processor cores.